metro Dataset


1. 숭실대입구(살피재) 역의 11월 1일의 시간대별 승차 및 하차 인원 수를 하나의 그래프로 시각화해보자.


# 사용할 패키지 추가
library(ggplot2)
library(tidyr)
library(dplyr)
library(ggthemes)
library(ggmap)
# 데이터파일 읽기
metro<-read.csv("metro.csv")
str(metro)
## 'data.frame':    16500 obs. of  30 variables:
##  $ X       : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ 날짜    : chr  "2019-11-01" "2019-11-01" "2019-11-01" "2019-11-01" ...
##  $ 호선    : chr  "1호선" "1호선" "1호선" "1호선" ...
##  $ 역번호  : int  150 150 151 151 152 152 153 153 154 154 ...
##  $ 역명    : chr  "서울역" "서울역" "시청" "시청" ...
##  $ 구분    : chr  "승차" "하차" "승차" "하차" ...
##  $ X04...05: int  32 2 3 0 5 0 11 1 2 0 ...
##  $ X05...06: int  438 353 89 182 143 211 187 127 83 175 ...
##  $ X06...07: int  529 2019 152 852 161 1078 154 477 115 622 ...
##  $ X07...08: int  1612 4520 289 2926 288 4395 302 1044 219 1817 ...
##  $ X08...09: int  3405 9906 435 9348 482 13000 386 3662 366 5234 ...
##  $ X09...10: int  2360 6525 481 4124 631 6669 550 3510 494 3292 ...
##  $ X10...11: int  2377 3571 716 2064 768 2964 841 2593 843 2292 ...
##  $ X11...12: int  2853 2951 1090 1889 1359 2501 1686 2813 1262 2349 ...
##  $ X12...13: int  3334 3190 1073 1538 1531 2127 1781 2646 1583 2160 ...
##  $ X13...14: int  3545 3348 1367 1751 1937 2108 2059 2718 1868 2159 ...
##  $ X14...15: int  2850 3179 1782 1403 2466 1926 2405 2579 2303 2071 ...
##  $ X15...16: int  4606 3265 2235 1431 2821 1718 3125 2103 2479 1559 ...
##  $ X16...17: int  4915 3575 2345 1218 3403 1778 3241 2010 2656 1777 ...
##  $ X17...18: int  7472 4191 3627 1249 5807 2396 3796 2033 3583 1599 ...
##  $ X18...19: int  11107 5445 7462 1486 10738 3746 4836 2582 5246 1776 ...
##  $ X19...20: int  5754 3882 2943 816 4680 2557 3192 1682 2709 1261 ...
##  $ X20...21: int  3920 2596 2249 439 3670 935 2107 675 1782 548 ...
##  $ X21...22: int  3799 2177 2199 288 4495 510 2452 512 1565 341 ...
##  $ X22...23: int  3369 1624 1460 296 4118 384 2407 380 1094 260 ...
##  $ X23...24: int  1678 912 640 202 2366 299 1394 323 596 153 ...
##  $ X00...01: int  228 478 62 47 271 75 236 143 66 73 ...
##  $ X01...02: int  2 39 0 1 1 0 6 10 1 1 ...
##  $ X02...03: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ X03...04: int  0 0 0 0 0 0 0 0 0 0 ...
# 텍스트 형태의 날짜를 Date 객체로 변환
metro$날짜 <- as.Date(metro$날짜)
str(metro)
## 'data.frame':    16500 obs. of  30 variables:
##  $ X       : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ 날짜    : Date, format: "2019-11-01" "2019-11-01" ...
##  $ 호선    : chr  "1호선" "1호선" "1호선" "1호선" ...
##  $ 역번호  : int  150 150 151 151 152 152 153 153 154 154 ...
##  $ 역명    : chr  "서울역" "서울역" "시청" "시청" ...
##  $ 구분    : chr  "승차" "하차" "승차" "하차" ...
##  $ X04...05: int  32 2 3 0 5 0 11 1 2 0 ...
##  $ X05...06: int  438 353 89 182 143 211 187 127 83 175 ...
##  $ X06...07: int  529 2019 152 852 161 1078 154 477 115 622 ...
##  $ X07...08: int  1612 4520 289 2926 288 4395 302 1044 219 1817 ...
##  $ X08...09: int  3405 9906 435 9348 482 13000 386 3662 366 5234 ...
##  $ X09...10: int  2360 6525 481 4124 631 6669 550 3510 494 3292 ...
##  $ X10...11: int  2377 3571 716 2064 768 2964 841 2593 843 2292 ...
##  $ X11...12: int  2853 2951 1090 1889 1359 2501 1686 2813 1262 2349 ...
##  $ X12...13: int  3334 3190 1073 1538 1531 2127 1781 2646 1583 2160 ...
##  $ X13...14: int  3545 3348 1367 1751 1937 2108 2059 2718 1868 2159 ...
##  $ X14...15: int  2850 3179 1782 1403 2466 1926 2405 2579 2303 2071 ...
##  $ X15...16: int  4606 3265 2235 1431 2821 1718 3125 2103 2479 1559 ...
##  $ X16...17: int  4915 3575 2345 1218 3403 1778 3241 2010 2656 1777 ...
##  $ X17...18: int  7472 4191 3627 1249 5807 2396 3796 2033 3583 1599 ...
##  $ X18...19: int  11107 5445 7462 1486 10738 3746 4836 2582 5246 1776 ...
##  $ X19...20: int  5754 3882 2943 816 4680 2557 3192 1682 2709 1261 ...
##  $ X20...21: int  3920 2596 2249 439 3670 935 2107 675 1782 548 ...
##  $ X21...22: int  3799 2177 2199 288 4495 510 2452 512 1565 341 ...
##  $ X22...23: int  3369 1624 1460 296 4118 384 2407 380 1094 260 ...
##  $ X23...24: int  1678 912 640 202 2366 299 1394 323 596 153 ...
##  $ X00...01: int  228 478 62 47 271 75 236 143 66 73 ...
##  $ X01...02: int  2 39 0 1 1 0 6 10 1 1 ...
##  $ X02...03: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ X03...04: int  0 0 0 0 0 0 0 0 0 0 ...
# 2019년 11월 1일의 숭실대입구역 데이터만 추출
metro_a1 <- subset(metro,역명=="숭실대입구(살피재)"&날짜=="2019-11-01")
str(metro_a1)
## 'data.frame':    2 obs. of  30 variables:
##  $ X       : int  473 474
##  $ 날짜    : Date, format: "2019-11-01" "2019-11-01"
##  $ 호선    : chr  "7호선" "7호선"
##  $ 역번호  : int  2740 2740
##  $ 역명    : chr  "숭실대입구(살피재)" "숭실대입구(살피재)"
##  $ 구분    : chr  "승차" "하차"
##  $ X04...05: int  3 0
##  $ X05...06: int  237 31
##  $ X06...07: int  498 314
##  $ X07...08: int  1875 400
##  $ X08...09: int  2637 1510
##  $ X09...10: int  1380 1010
##  $ X10...11: int  752 1163
##  $ X11...12: int  747 973
##  $ X12...13: int  723 726
##  $ X13...14: int  846 716
##  $ X14...15: int  998 938
##  $ X15...16: int  1030 814
##  $ X16...17: int  1439 1050
##  $ X17...18: int  1715 1245
##  $ X18...19: int  1390 2027
##  $ X19...20: int  876 1676
##  $ X20...21: int  615 987
##  $ X21...22: int  579 937
##  $ X22...23: int  500 925
##  $ X23...24: int  354 715
##  $ X00...01: int  77 373
##  $ X01...02: int  0 0
##  $ X02...03: int  0 0
##  $ X03...04: int  0 0
#gather을 이용해 여러 시간대와 인원수를 하나의 변수로 바꿈
metro_a1 <- gather(metro_a1, key="time",value="count",X04...05:X03...04)
str(metro_a1)
## 'data.frame':    48 obs. of  8 variables:
##  $ X     : int  473 474 473 474 473 474 473 474 473 474 ...
##  $ 날짜  : Date, format: "2019-11-01" "2019-11-01" ...
##  $ 호선  : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호: int  2740 2740 2740 2740 2740 2740 2740 2740 2740 2740 ...
##  $ 역명  : chr  "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" ...
##  $ 구분  : chr  "승차" "하차" "승차" "하차" ...
##  $ time  : chr  "X04...05" "X04...05" "X05...06" "X05...06" ...
##  $ count : int  3 0 237 31 498 314 1875 400 2637 1510 ...
#그래프 그리기
ggplot(metro_a1, aes(x=time, y=count, fill=구분)) + geom_bar(stat='identity',position = position_dodge(preserve = "single")) + theme_minimal() + labs(x="시간대", y="인원 수", title="2019년 11월 1일 숭실대입구역 시간대별 승차 및 하차 인원 수") +  theme(axis.text.x = element_text(angle = 45, 
 hjust = 1)) 



2. 숭실대입구(살피재) 역의 11월 4일(월)부터 11월10일(일)까지 일주일간 각 요일별 시간대별 승차인원과 하차인원의 분포를 각각 heat map으로 시각화해보자.


# 2019년 11월 4일부터 10일까지 숭실대입구역 데이터 추출
metro_a2 <- subset(metro,역명=="숭실대입구(살피재)"&날짜>="2019-11-04"&날짜<="2019-11-10")
str(metro_a2)
## 'data.frame':    14 obs. of  30 variables:
##  $ X       : int  2123 2124 2673 2674 3223 3224 3773 3774 4323 4324 ...
##  $ 날짜    : Date, format: "2019-11-04" "2019-11-04" ...
##  $ 호선    : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호  : int  2740 2740 2740 2740 2740 2740 2740 2740 2740 2740 ...
##  $ 역명    : chr  "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" ...
##  $ 구분    : chr  "승차" "하차" "승차" "하차" ...
##  $ X04...05: int  1 0 2 0 0 0 2 0 3 0 ...
##  $ X05...06: int  252 35 236 28 250 31 239 30 239 32 ...
##  $ X06...07: int  585 242 546 202 522 216 555 174 481 192 ...
##  $ X07...08: int  2106 387 2005 423 2002 445 1988 407 1925 371 ...
##  $ X08...09: int  2686 1969 2838 1908 2767 2108 2746 1649 2703 1509 ...
##  $ X09...10: int  1321 1271 1392 1193 1480 1084 1405 1088 1384 1128 ...
##  $ X10...11: int  733 1738 764 1815 747 1761 804 1536 788 1229 ...
##  $ X11...12: int  656 1104 759 1073 660 1132 740 1115 707 934 ...
##  $ X12...13: int  650 787 652 778 635 706 648 709 734 753 ...
##  $ X13...14: int  767 922 793 986 784 870 823 957 938 776 ...
##  $ X14...15: int  836 843 856 796 874 887 942 803 863 984 ...
##  $ X15...16: int  849 755 887 812 746 801 873 768 910 847 ...
##  $ X16...17: int  1467 896 1525 963 1561 1004 1425 1008 1549 1009 ...
##  $ X17...18: int  1660 1183 1593 1298 1623 1295 1454 1166 1720 1403 ...
##  $ X18...19: int  1361 2399 1348 2085 1425 2336 1244 2089 1498 2086 ...
##  $ X19...20: int  847 1919 920 1897 804 1842 820 1870 831 1745 ...
##  $ X20...21: int  732 1022 705 1020 791 968 712 1050 709 1001 ...
##  $ X21...22: int  1005 860 919 964 924 886 899 971 649 842 ...
##  $ X22...23: int  724 861 703 892 715 881 592 935 583 957 ...
##  $ X23...24: int  353 488 431 509 453 586 454 672 375 630 ...
##  $ X00...01: int  92 212 72 217 115 272 85 256 73 406 ...
##  $ X01...02: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ X02...03: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ X03...04: int  0 0 0 0 0 0 0 0 0 0 ...
#gather을 이용해 여러 시간대와 인원수를 하나의 변수로 바꿈
metro_a2 <- gather(metro_a2, key="time",value="count",X04...05:X03...04)
str(metro_a2)
## 'data.frame':    336 obs. of  8 variables:
##  $ X     : int  2123 2124 2673 2674 3223 3224 3773 3774 4323 4324 ...
##  $ 날짜  : Date, format: "2019-11-04" "2019-11-04" ...
##  $ 호선  : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호: int  2740 2740 2740 2740 2740 2740 2740 2740 2740 2740 ...
##  $ 역명  : chr  "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" ...
##  $ 구분  : chr  "승차" "하차" "승차" "하차" ...
##  $ time  : chr  "X04...05" "X04...05" "X04...05" "X04...05" ...
##  $ count : int  1 0 2 0 0 0 2 0 3 0 ...
# 승차,하차 데이터 추출
metro_a2_s <- subset(metro_a2, 구분=="승차")
str(metro_a2_s)
## 'data.frame':    168 obs. of  8 variables:
##  $ X     : int  2123 2673 3223 3773 4323 4873 5423 2123 2673 3223 ...
##  $ 날짜  : Date, format: "2019-11-04" "2019-11-05" ...
##  $ 호선  : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호: int  2740 2740 2740 2740 2740 2740 2740 2740 2740 2740 ...
##  $ 역명  : chr  "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" ...
##  $ 구분  : chr  "승차" "승차" "승차" "승차" ...
##  $ time  : chr  "X04...05" "X04...05" "X04...05" "X04...05" ...
##  $ count : int  1 2 0 2 3 3 0 252 236 250 ...
metro_a2_h <- subset(metro_a2, 구분=="하차")
str(metro_a2_h)
## 'data.frame':    168 obs. of  8 variables:
##  $ X     : int  2124 2674 3224 3774 4324 4874 5424 2124 2674 3224 ...
##  $ 날짜  : Date, format: "2019-11-04" "2019-11-05" ...
##  $ 호선  : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호: int  2740 2740 2740 2740 2740 2740 2740 2740 2740 2740 ...
##  $ 역명  : chr  "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" "숭실대입구(살피재)" ...
##  $ 구분  : chr  "하차" "하차" "하차" "하차" ...
##  $ time  : chr  "X04...05" "X04...05" "X04...05" "X04...05" ...
##  $ count : int  0 0 0 0 0 0 0 35 28 31 ...
# 각 요일별 시간대별 승차인원과 하차인원의 분포를 각각 heat map 그리기
ggplot(metro_a2_s,aes(x=날짜, y=time, fill=count)) + geom_tile() + theme_minimal() + labs(x="날짜",y="시간대",title="2019년 11월 4일부터 2019년 11월 10일까지 일주일간 각 요일별 시간대별 승차인원") + scale_x_date(breaks="1 day")

ggplot(metro_a2_h,aes(x=날짜, y=time, fill=count)) + geom_tile() + theme_minimal() + labs(x="날짜",y="시간대",title="2019년 11월 4일부터 2019년 11월 10일까지 일주일간 각 요일별 시간대별 하차인원") + scale_x_date(breaks = "1 day")


3. 7호선의 모든 역 중에서 유동인구(월간 승하차 전체인원)가 가장 많은 20개 역에 대한 유동인구 수를 그래프로 시각화해보자.


# 7호선 데이터 추출
metro_a3 <- subset(metro,호선=="7호선")
str(metro_a3)
## 'data.frame':    3060 obs. of  30 variables:
##  $ X       : int  415 416 417 418 419 420 421 422 423 424 ...
##  $ 날짜    : Date, format: "2019-11-01" "2019-11-01" ...
##  $ 호선    : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호  : int  2711 2711 2712 2712 2713 2713 2714 2714 2715 2715 ...
##  $ 역명    : chr  "장암" "장암" "도봉산" "도봉산" ...
##  $ 구분    : chr  "승차" "하차" "승차" "하차" ...
##  $ X04...05: int  0 0 2 0 0 0 0 0 0 0 ...
##  $ X05...06: int  61 3 175 24 355 27 366 59 302 71 ...
##  $ X06...07: int  280 70 698 188 901 210 895 193 659 276 ...
##  $ X07...08: int  835 48 2587 286 2495 340 2846 397 1772 883 ...
##  $ X08...09: int  552 53 1874 654 2304 718 2843 478 1788 1932 ...
##  $ X09...10: int  162 44 908 627 1195 624 1189 411 1157 1806 ...
##  $ X10...11: int  115 54 485 608 753 541 753 331 1071 1315 ...
##  $ X11...12: int  78 45 393 377 610 544 680 374 1161 1038 ...
##  $ X12...13: int  62 47 404 435 696 516 800 538 1249 1195 ...
##  $ X13...14: int  83 43 474 445 671 538 686 481 1228 1433 ...
##  $ X14...15: int  95 48 464 517 654 507 566 643 1288 1370 ...
##  $ X15...16: int  76 33 517 568 633 712 637 686 1654 1594 ...
##  $ X16...17: int  114 51 691 622 741 913 586 924 1600 1717 ...
##  $ X17...18: int  163 60 673 874 939 1098 685 1031 1765 1945 ...
##  $ X18...19: int  152 112 566 1305 911 1664 575 1609 2004 3009 ...
##  $ X19...20: int  89 137 291 1895 528 2009 373 1854 1253 2786 ...
##  $ X20...21: int  72 89 186 986 332 1080 259 1191 1235 1392 ...
##  $ X21...22: int  34 46 149 839 274 1013 187 801 1123 1005 ...
##  $ X22...23: int  21 45 95 884 207 938 151 902 1186 855 ...
##  $ X23...24: int  13 29 28 676 119 742 89 619 591 717 ...
##  $ X00...01: int  2 14 7 455 20 362 18 340 150 357 ...
##  $ X01...02: int  0 0 0 70 0 46 0 0 0 9 ...
##  $ X02...03: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ X03...04: int  0 0 0 0 0 0 0 0 0 0 ...
#gather을 이용해 여러 시간대와 인원수를 하나의 변수로 바꿈
metro_a3 <- gather(metro_a3,key="time", value="count",X04...05:X03...04)
str(metro_a3)
## 'data.frame':    73440 obs. of  8 variables:
##  $ X     : int  415 416 417 418 419 420 421 422 423 424 ...
##  $ 날짜  : Date, format: "2019-11-01" "2019-11-01" ...
##  $ 호선  : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호: int  2711 2711 2712 2712 2713 2713 2714 2714 2715 2715 ...
##  $ 역명  : chr  "장암" "장암" "도봉산" "도봉산" ...
##  $ 구분  : chr  "승차" "하차" "승차" "하차" ...
##  $ time  : chr  "X04...05" "X04...05" "X04...05" "X04...05" ...
##  $ count : int  0 0 2 0 0 0 0 0 0 0 ...
# 역명과 count 열 데이터 추출
metro_a3 <- metro_a3[,c(5,8)]
str(metro_a3)
## 'data.frame':    73440 obs. of  2 variables:
##  $ 역명 : chr  "장암" "장암" "도봉산" "도봉산" ...
##  $ count: int  0 0 2 0 0 0 0 0 0 0 ...
# 각 역 유동인구수 총합 구하기,aggregate() 함수 사용
metro_a3 <- aggregate(x=metro_a3[-1], by=list(metro_a3$역명), sum)
str(metro_a3)
## 'data.frame':    51 obs. of  2 variables:
##  $ Group.1: chr  "가산디지털단지" "강남구청" "건대입구" "고속터미널" ...
##  $ count  : int  2467681 1005604 1063609 1231777 846742 1572786 825795 601076 465364 1012929 ...
# 유동인구수가 많은 상위 20개역을 추출하기 위해
# dplyr 패키지의 arrange() 함수 사용
# 상위 20개 역 데이터를 추출
metro_a3_ordered <- arrange(metro_a3, -count)
str(metro_a3_ordered)
## 'data.frame':    51 obs. of  2 variables:
##  $ Group.1: chr  "가산디지털단지" "광명사거리" "철산" "학동" ...
##  $ count  : int  2467681 1572786 1495127 1404699 1349957 1313487 1238686 1231777 1228682 1078534 ...
metro_a3 <- metro_a3_ordered[1:20,]
str(metro_a3)
## 'data.frame':    20 obs. of  2 variables:
##  $ Group.1: chr  "가산디지털단지" "광명사거리" "철산" "학동" ...
##  $ count  : int  2467681 1572786 1495127 1404699 1349957 1313487 1238686 1231777 1228682 1078534 ...
# 그래프 그리기
ggplot(metro_a3, aes(x=reorder(Group.1, count),y=count)) + geom_bar(stat="identity") + coord_flip()


4. 7호선 지하철역 위치 정보를 활용하여 7호선의 모든 역에 대한 유동인구 분포를 지도 위에 시각화해보자. 크기, 투명도 등을 활용하여 분포를 표현할 수 있다.


# 7호선 역 위도,경도 데이터 읽기
metro_coord <- read.csv("metro_coord.csv")
str(metro_coord)
## 'data.frame':    51 obs. of  6 variables:
##  $ X     : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ 역번호: int  2748 2732 2729 2736 2718 2750 2727 2760 2753 2747 ...
##  $ 역명  : chr  "가산디지털단지" "강남구청" "건대입구" "고속터미널" ...
##  $ 호선  : int  7 7 7 7 7 7 7 7 7 7 ...
##  $ lat   : num  37.5 37.5 37.5 37.5 37.6 ...
##  $ lon   : num  127 127 127 127 127 ...
#7호선 데이터 추출
metro_a4 <- subset(metro,호선=="7호선")
str(metro_a4)
## 'data.frame':    3060 obs. of  30 variables:
##  $ X       : int  415 416 417 418 419 420 421 422 423 424 ...
##  $ 날짜    : Date, format: "2019-11-01" "2019-11-01" ...
##  $ 호선    : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호  : int  2711 2711 2712 2712 2713 2713 2714 2714 2715 2715 ...
##  $ 역명    : chr  "장암" "장암" "도봉산" "도봉산" ...
##  $ 구분    : chr  "승차" "하차" "승차" "하차" ...
##  $ X04...05: int  0 0 2 0 0 0 0 0 0 0 ...
##  $ X05...06: int  61 3 175 24 355 27 366 59 302 71 ...
##  $ X06...07: int  280 70 698 188 901 210 895 193 659 276 ...
##  $ X07...08: int  835 48 2587 286 2495 340 2846 397 1772 883 ...
##  $ X08...09: int  552 53 1874 654 2304 718 2843 478 1788 1932 ...
##  $ X09...10: int  162 44 908 627 1195 624 1189 411 1157 1806 ...
##  $ X10...11: int  115 54 485 608 753 541 753 331 1071 1315 ...
##  $ X11...12: int  78 45 393 377 610 544 680 374 1161 1038 ...
##  $ X12...13: int  62 47 404 435 696 516 800 538 1249 1195 ...
##  $ X13...14: int  83 43 474 445 671 538 686 481 1228 1433 ...
##  $ X14...15: int  95 48 464 517 654 507 566 643 1288 1370 ...
##  $ X15...16: int  76 33 517 568 633 712 637 686 1654 1594 ...
##  $ X16...17: int  114 51 691 622 741 913 586 924 1600 1717 ...
##  $ X17...18: int  163 60 673 874 939 1098 685 1031 1765 1945 ...
##  $ X18...19: int  152 112 566 1305 911 1664 575 1609 2004 3009 ...
##  $ X19...20: int  89 137 291 1895 528 2009 373 1854 1253 2786 ...
##  $ X20...21: int  72 89 186 986 332 1080 259 1191 1235 1392 ...
##  $ X21...22: int  34 46 149 839 274 1013 187 801 1123 1005 ...
##  $ X22...23: int  21 45 95 884 207 938 151 902 1186 855 ...
##  $ X23...24: int  13 29 28 676 119 742 89 619 591 717 ...
##  $ X00...01: int  2 14 7 455 20 362 18 340 150 357 ...
##  $ X01...02: int  0 0 0 70 0 46 0 0 0 9 ...
##  $ X02...03: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ X03...04: int  0 0 0 0 0 0 0 0 0 0 ...
#gather을 이용해 여러 시간대와 인원수를 하나의 변수로 바꿈
metro_a4 <- gather(metro_a4, key="time",value="count",X04...05:X03...04)
str(metro_a4)
## 'data.frame':    73440 obs. of  8 variables:
##  $ X     : int  415 416 417 418 419 420 421 422 423 424 ...
##  $ 날짜  : Date, format: "2019-11-01" "2019-11-01" ...
##  $ 호선  : chr  "7호선" "7호선" "7호선" "7호선" ...
##  $ 역번호: int  2711 2711 2712 2712 2713 2713 2714 2714 2715 2715 ...
##  $ 역명  : chr  "장암" "장암" "도봉산" "도봉산" ...
##  $ 구분  : chr  "승차" "하차" "승차" "하차" ...
##  $ time  : chr  "X04...05" "X04...05" "X04...05" "X04...05" ...
##  $ count : int  0 0 2 0 0 0 0 0 0 0 ...
# 역명과 count 열 데이터 추출
metro_a4 <- metro_a4[,c(5,8)]
str(metro_a4)
## 'data.frame':    73440 obs. of  2 variables:
##  $ 역명 : chr  "장암" "장암" "도봉산" "도봉산" ...
##  $ count: int  0 0 2 0 0 0 0 0 0 0 ...
# aggregate() 함수 사용
metro_a4 <- aggregate(x=metro_a4[-1], by=list(metro_a4$역명), sum)
str(metro_a4)
## 'data.frame':    51 obs. of  2 variables:
##  $ Group.1: chr  "가산디지털단지" "강남구청" "건대입구" "고속터미널" ...
##  $ count  : int  2467681 1005604 1063609 1231777 846742 1572786 825795 601076 465364 1012929 ...
# 7호선 역의 최대,최소 latitude and logitude
min(metro_coord$lon)
## [1] 126.7205
max(metro_coord$lon)
## [1] 127.0885
min(metro_coord$lat)
## [1] 37.47605
max(metro_coord$lat)
## [1] 37.70011
#latitude and logitude
bbox <- c(left = 126.6, bottom=37.4, right=127.1, top=37.8)


# get 7호선 map
station <- get_stamenmap(bbox, zoom=10, maptype="terrain")
## Source : http://tile.stamen.com/terrain/10/872/395.png
## Source : http://tile.stamen.com/terrain/10/873/395.png
## Source : http://tile.stamen.com/terrain/10/872/396.png
## Source : http://tile.stamen.com/terrain/10/873/396.png
## Source : http://tile.stamen.com/terrain/10/872/397.png
## Source : http://tile.stamen.com/terrain/10/873/397.png
ggmap(station)

#열이름 변경
metro_a4 <-rename(metro_a4,"역명"="Group.1")
str(metro_a4)
## 'data.frame':    51 obs. of  2 variables:
##  $ 역명 : chr  "가산디지털단지" "강남구청" "건대입구" "고속터미널" ...
##  $ count: int  2467681 1005604 1063609 1231777 846742 1572786 825795 601076 465364 1012929 ...
#데이터 셋 병합
aa <- merge(metro_coord,metro_a4,by='역명')
str(aa)
## 'data.frame':    51 obs. of  7 variables:
##  $ 역명  : chr  "가산디지털단지" "강남구청" "건대입구" "고속터미널" ...
##  $ X     : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ 역번호: int  2748 2732 2729 2736 2718 2750 2727 2760 2753 2747 ...
##  $ 호선  : int  7 7 7 7 7 7 7 7 7 7 ...
##  $ lat   : num  37.5 37.5 37.5 37.5 37.6 ...
##  $ lon   : num  127 127 127 127 127 ...
##  $ count : int  2467681 1005604 1063609 1231777 846742 1572786 825795 601076 465364 1012929 ...
# 그래프 그리기(크기)
ggmap(station, base_layer = ggplot(data=aa, aes(x=lon, y=lat, size=count))) + geom_point(color="blue",alpha=.4) + theme_void() + labs(title="2019년 11월 7호선 모든 역 유동인구 분포", size="유동인구")

# 그래프 그리기(투명도)
ggmap(station, base_layer = ggplot(data=aa, aes(x=lon, y=lat, alpha=count))) + geom_point(color="blue",size=3) + theme_void() + labs(title="2019년 11월 7호선 모든 역 유동인구 분포", alpha="유동인구")